<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of ArmazenagemMapper
 *
 * @author felipe
 */
class App_Model_ArmazenagemMapper extends Voitech_Mapper{
    
    public function __construct(App_Model_Armazenagem $obArmazenagem){
        $this->obModel = $obArmazenagem;
    }    
    
    public function buscarPorId() {}
    
    public function carregar(stdClass $obRow) {
        
        $this->obModel->setNuQuantidadeProdutoEstoque($obRow->nu_quantidade_produto_estoque);
        
        $obProdutoMapper = new App_Model_ProdutoMapper(new App_Model_Produto());
        $this->obModel->setObProduto($obProdutoMapper->carregar($obRow)->getObModel());
        
        if( isset($obRow->co_compra) and !empty($obRow->co_compra) ){
            $this->obModel->setObCompra(new App_Model_Compra($obRow->co_compra));
        }
        
        if( isset($obRow->co_distribuicao) and !empty($obRow->co_distribuicao)){
            $this->obModel->setObCompra(new App_Model_Distribuicao($obRow->co_distribuicao));
        }        
        return $this;
    }
    
    public function cadastrar() {        
        if( !( $this->obModel->getObCompra() instanceof App_Model_Compra ) ){
            throw new Voitech_Exception('Erro ao cadastrar compra na armazegem');
        }      
        
        foreach($this->obModel->getObCompra()->getArrItemCompra() as $itemCompra){
            for($x=0;$x<$itemCompra->getNuQuantidadeProduto();$x++){
                $arCadastro = array('co_produto'=>$itemCompra->getObProduto()->getCoProduto()
                                   ,'co_compra'=>$this->obModel->getObCompra()->getCoCompra());
                App_Model_Db_Armazenagem::build()->insert($arCadastro);
            }
        }                
    }
    public function alterar() {
        $co_produto_anterior = 0;
        foreach($this->obModel->getObDistribuicao()->getArItemDistribuicao() as $itemDistribuicao){
            for($x=0;$x < $itemDistribuicao->getNuQuantidadeAtendida();$x++){
                $rowDbArmagenagem = App_Model_Db_Armazenagem::build()->fetchRow('co_produto = '.$itemDistribuicao->getObProduto()->getCoProduto().' and co_distribuicao is null');
                if(empty($rowDbArmagenagem)){
                    throw new Voitech_Exception("(".$itemDistribuicao->getObProduto()->getCoProduto().") - produto não disponível");
                }
                $rowDbArmagenagem->co_distribuicao = $this->obModel->getObDistribuicao()->getCoDistribuicao();
                $rowDbArmagenagem->save();
            }
        }
    }
    public function retornarArrayPopulado() {
        $arPopulado = array('co_produto'=>$this->obModel->getObProduto()->getCoProduto()
                           ,'co_compra'=>$this->obModel->getObCompra()->getCoCompra());
        if( $this->obModel->getObDistribuicao() instanceof App_Model_Distribuicao ){
            $arPopulado['co_distriuicao'] = $this->obModel->getObDistribuicao()->getCoDistribuicao();
        }
        return $arPopulado;
    }
}